/*********************************************************************
 * Copyright (C) 2003 Andrew Khan
 * <p>
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * <p>
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * <p>
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 ***************************************************************************/

package jxl.write;

import jxl.biff.drawing.Drawing;
import jxl.biff.drawing.DrawingGroup;
import jxl.biff.drawing.DrawingGroupObject;

import java.io.File;

/**
 * Allows an image to be created, or an existing image to be manipulated
 * Note that co-ordinates and dimensions are given in cells, so that if for
 * example the width or height of a cell which the image spans is altered,
 * the image will have a correspondign distortion
 */
public class WritableImage extends Drawing {
    // Shadow these values from the superclass.  The only practical reason
    // for doing this is that they  appear nicely in the javadoc

    /**
     * Image anchor properties which will move and resize an image
     * along with the cells
     */
    public static ImageAnchorProperties MOVE_AND_SIZE_WITH_CELLS =
            Drawing.MOVE_AND_SIZE_WITH_CELLS;

    /**
     * Image anchor properties which will move an image
     * when cells are inserted or deleted
     */
    public static ImageAnchorProperties MOVE_WITH_CELLS =
            Drawing.MOVE_WITH_CELLS;

    /**
     * Image anchor properties which will leave an image unaffected when
     * other cells are inserted, removed or resized
     */
    public static ImageAnchorProperties NO_MOVE_OR_SIZE_WITH_CELLS =
            Drawing.NO_MOVE_OR_SIZE_WITH_CELLS;

    /**
     * Constructor
     *
     * @param x the column number at which to position the image
     * @param y the row number at which to position the image
     * @param width the number of columns cells which the image spans
     * @param height the number of rows which the image spans
     * @param image the source image file
     */
    public WritableImage(double x, double y,
                         double width, double height,
                         File image) {
        super(x, y, width, height, image);
    }

    /**
     * Constructor
     *
     * @param x the column number at which to position the image
     * @param y the row number at which to position the image
     * @param width the number of columns cells which the image spans
     * @param height the number of rows which the image spans
     * @param imageData the image data
     */
    public WritableImage(double x,
                         double y,
                         double width,
                         double height,
                         byte[] imageData) {
        super(x, y, width, height, imageData);
    }

    /**
     * Constructor, used when copying sheets
     *
     * @param d the image to copy
     * @param dg the drawing group
     */
    public WritableImage(DrawingGroupObject d, DrawingGroup dg) {
        super(d, dg);
    }

    /**
     * Accessor for the image position
     *
     * @return the column number at which the image is positioned
     */
    public double getColumn() {
        return super.getX();
    }

    /**
     * Accessor for the image position
     *
     * @param c the column number at which the image should be positioned
     */
    public void setColumn(double c) {
        super.setX(c);
    }

    /**
     * Accessor for the image position
     *
     * @return the row number at which the image is positions
     */
    public double getRow() {
        return super.getY();
    }

    /**
     * Accessor for the image position
     *
     * @param c the row number at which the image should be positioned
     */
    public void setRow(double c) {
        super.setY(c);
    }

    /**
     * Accessor for the image dimensions
     *
     * @return the number of columns this image spans
     */
    public double getWidth() {
        return super.getWidth();
    }

    /**
     * Accessor for the image dimensions
     * Note that the actual size of the rendered image will depend on the
     * width of the columns it spans
     *
     * @param c the number of columns which this image spans
     */
    public void setWidth(double c) {
        super.setWidth(c);
    }

    /**
     * Accessor for the image dimensions
     *
     * @return the number of rows which this image spans
     */
    public double getHeight() {
        return super.getHeight();
    }

    /**
     * Accessor for the image dimensions
     * Note that the actual size of the rendered image will depend on the
     * height of the rows it spans
     *
     * @param c the number of rows which this image should span
     */
    public void setHeight(double c) {
        super.setHeight(c);
    }

    /**
     * Accessor for the image file
     *
     * @return the file which the image references
     */
    public File getImageFile() {
        return super.getImageFile();
    }

    /**
     * Accessor for the image data
     *
     * @return the image data
     */
    public byte[] getImageData() {
        return super.getImageData();
    }

    /**
     * Accessor for the anchor properties
     */
    public void setImageAnchor(ImageAnchorProperties iap) {
        super.setImageAnchor(iap);
    }

    /**
     * Accessor for the anchor properties
     */
    public ImageAnchorProperties getImageAnchor() {
        return super.getImageAnchor();
    }
}
